/*
 * Copyright (c) 2009 Kathryn Huxtable and Kenneth Orr.
 *
 * This file is part of the SeaGlass Pluggable Look and Feel.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 * $Id: SeaGlassPainter.java 1590 2011-08-05 20:12:11Z rosstauscher@gmx.de $
 */
package com.seaglasslookandfeel.painter;

import java.awt.Graphics2D;

/**
 * An interface that allows painting to be delegated. The implementation of this
 * interface will be called during the painting process of the given {@code
 * objectToPaint}.
 */
public interface SeaGlassPainter<T> extends javax.swing.Painter<T>, com.sun.java.swing.Painter<T> {

    /**
     * Renders to the given {@link Graphics2D}. The supplied graphics context
     * may be modified - it's state need not be restored upon completion of
     * painting.
     * 
     * @param graphics
     *            the graphics context to paint into. It's state need not be
     *            restored. Will not be null.
     * @param objectToPaint
     *            the object to be painted.
     * @param width
     *            the width within the object to paint.
     * @param height
     *            the height within the object to paint.
     */
    void paint(Graphics2D graphics, T objectToPaint, int width, int height);

}
